home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Info-Mac 3
/
Info_Mac_1994-01.iso
/
Development
/
Source
/
Little C Source
/
LCLib.c
< prev
next >
Wrap
Text File
|
1993-10-04
|
3KB
|
110 lines
/****** Internal Library Functions *******/
/* Add more of your own, here. */
/* if your compiler does not support this header file, remove it */
#ifndef MACINTOSH
#include <conio.h>
#endif
#include <stdio.h>
#include <stdlib.h>
extern char *prog; /* points to current location in program */
extern char token[80]; /* holds string representation of token */
extern char token_type; /* contains type of token */
extern char tok; /* holds the internal representation of token */
enum tok_types {DELIMITER, IDENTIFIER, NUMBER, COMMAND, STRING,
QUOTE, VARIABLE, BLOCK, FUNCTION};
/* These are the constants used to call sntx_err() when
a syntax error occurs. Add more if you like.
NOTE: SYNTAX is a generic error message used when
nothing else seems appropriate.
*/
enum error_msg
{SYNTAX, UNBAL_PARENS, NO_EXP, EQUALS_EXPECTED,
NOT_VAR, PARAM_ERR, SEMI_EXPECTED,
UNBAL_BRACES, FUNC_UNDEF, TYPE_EXPECTED,
NEST_FUNC, RET_NOCALL, PAREN_EXPECTED,
WHILE_EXPECTED, QUOTE_EXPECTED, NOT_STRING,
TOO_MANY_LVARS};
int get_token(void);
void sntx_err(int error), eval_exp(int *result);
void putback(void);
/* Get a character from console. (Use getchar()) if
your compiler does not support getche().) */
call_getche()
{
char ch;
#ifdef MACINTOSH
ch = getchar();
#else
ch = getche();
#endif
while(*prog!=')') prog++;
prog++; /* advance to end of line */
return ch;
}
/* Put a character to the display. (Use putchar()
if your compiler does not support putch().) */
call_putch()
{
int value;
eval_exp(&value);
printf("%c", value);
return value;
}
/* Call puts(). */
call_puts(void)
{
get_token();
if(*token!='(') sntx_err(PAREN_EXPECTED);
get_token();
if(token_type!=QUOTE) sntx_err(QUOTE_EXPECTED);
puts(token);
get_token();
if(*token!=')') sntx_err(PAREN_EXPECTED);
get_token();
if(*token!=';') sntx_err(SEMI_EXPECTED);
putback();
return 0;
}
/* A built-in console output function. */
int print(void)
{
int i;
get_token();
if(*token!='(') sntx_err(PAREN_EXPECTED);
get_token();
if(token_type==QUOTE) /* output a string */
printf("%s ", token);
else { /* output a number */
putback();
eval_exp(&i);
printf("%d ", i);
}
get_token();
if(*token!=')') sntx_err(PAREN_EXPECTED);
get_token();
if(*token!=';') sntx_err(SEMI_EXPECTED);
putback();
return 0;
}
/* Read an integer from the keyboard. */
getnum(void)
{
char s[80];
gets(s);
while(*prog!=')') prog++;
prog++; /* advance to end of line */
return atoi(s);
}